package com.rxkj.config;

import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.bind.annotation.RestController;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@Configuration
@EnableSwagger2    //开启 Swagger2
//@EnableOpenApi     //开启 Swagger3，可以不写
@EnableKnife4j     //开启 knife4j，可以不写
public class Knife4jConfig {

    @Bean(value = "defaultApi3")
    public Docket defaultApi3() {

        /**
         * 通过注解表明该接口会生成文档，包括接口名、请求方法、参数、返回信息的等等。
         * @Api：修饰整个类，描述Controller的作用。
         * @ApiOperation：描述一个类的一个方法，或者说一个接口。
         * @ApiParam：单个参数描述。
         * @ApiModel：描述接收参数的实体对象。
         * @ApiProperty：用对象接收参数时，描述对象的一个字段。
         * @ApiResponse：HTTP响应其中1个描述。
         * @ApiResponses：HTTP响应整体描述。
         * @ApiIgnore：使用该注解忽略这个API。
         * @ApiError ：发生错误返回的信息。
         * @ApiImplicitParam：一个请求参数。
         * @ApiImplicitParams：多个请求参数。
         */
        // Swagger 2 使用的是：DocumentationType.SWAGGER_2
        // Swagger 3 使用的是：DocumentationType.OAS_30
        Docket docket = new Docket(DocumentationType.SWAGGER_2)
                // 定义是否开启swagger，false为关闭，可以通过变量控制
                .enable(true)
                .apiInfo(new ApiInfoBuilder()
                        .title("泸县大坝安全监测平台(四川融鑫) API接口文档")
                        .description("泸县大坝安全监测平台 四川融鑫信息科技有限公司")
                        .termsOfServiceUrl("http://127.0.0.1:8080/login")
                        .contact(new Contact("四川融鑫信息科技有限公司", "http://www.rongxinkj.com.cn/", "1053480557@qq.com"))
                        .version("1.0.0")
                        .build())
                //分组名称
                .groupName("泸县大坝安全监测平台-API")
                .select()
                .apis(RequestHandlerSelectors.withClassAnnotation(RestController.class))
                //这里指定Controller扫描包路径
                .apis(RequestHandlerSelectors.basePackage("com.rxkj"))
                .paths(PathSelectors.any())
                .build();
        return docket;
    }

}
